import Vue from "vue";
import Router from "vue-router";
import store from "../store/index";
Vue.use(Router);

/* Layout */
import Layout from "@/layout";

/* Router Modules */
// import componentsRouter from './modules/components'
// import chartsRouter from './modules/charts'
// import tableRouter from './modules/table'
// import nestedRouter from './modules/nested'

/**
 * Note: sub-menu only appear when route children.length >= 1
 * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
 *
 * hidden: true                   if set true, item will not show in the sidebar(default is false)
 * alwaysShow: true               if set true, will always show the root menu
 *                                if not set alwaysShow, when item has more than one children route,
 *                                it will becomes nested mode, otherwise not show the root menu
 * redirect: noRedirect           if set noRedirect will no redirect in the breadcrumb
 * name:'router-name'             the name is used by <keep-alive> (must set!!!)
 * meta : {
    roles: ['admin','editor']    control the page roles (you can set multiple roles)
    title: 'title'               the name show in sidebar and breadcrumb (recommend set)
    icon: 'svg-name'/'el-icon-x' the icon show in the sidebar
    noCache: true                if set true, the page will no be cached(default is false)
    affix: true                  if set true, the tag will affix in the tags-view
    breadcrumb: false            if set false, the item will hidden in breadcrumb(default is true)
    activeMenu: '/example/list'  if set path, the sidebar will highlight the path you set
  }
 */

/**
 * constantRoutes
 * a base page that does not have permission requirements
 * all roles can be accessed
 */
export const constantRoutes = [
  {
    path: "/redirect",
    component: Layout,
    hidden: true,
    children: [
      {
        path: "/redirect/:path(.*)",
        component: () => import("@/views/redirect/index")
      }
    ]
  },
  {
    path: "/login",
    component: () => import("@/views/login/index"),
    hidden: true
  },
  {
    path: "/view",
    component: () => import("@/views/billing/bill-view"),
    // name: 'billView',
    hidden: true
    // meta: { title: '查看账单', noCache: true }
  },
  {
    path: "/report",
    component: () => import("@/views/billing/report-view"),
    // name: 'billView',
    hidden: true
    // meta: { title: '查看账单', noCache: true }
  },
  {
    path: "/auth-redirect",
    component: () => import("@/views/login/auth-redirect"),
    hidden: true
  },
  {
    path: "/404",
    component: () => import("@/views/error-page/404"),
    hidden: true
  },
  {
    path: "/401",
    component: () => import("@/views/error-page/401"),
    hidden: true
  },

  {
    path: "/documentation",
    component: Layout,
    hidden: true,
    children: [
      {
        path: "index",
        component: () => import("@/views/documentation/index"),
        name: "Documentation",
        meta: { title: "Documentation", icon: "documentation", affix: true }
      }
    ]
  },
  {
    path: "/guide",
    component: Layout,
    hidden: true,
    redirect: "/guide/index",
    children: [
      {
        path: "index",
        component: () => import("@/views/guide/index"),
        name: "Guide",
        meta: { title: "Guide", icon: "guide", noCache: true }
      }
    ]
  },
  {
    path: "/profile",
    component: Layout,
    redirect: "/profile/index",
    hidden: true,
    children: [
      {
        path: "index",
        component: () => import("@/views/profile/index"),
        name: "Profile",
        meta: { title: "Profile", icon: "user", noCache: true }
      }
    ]
  }
];

/**
 * asyncRoutes
 * the routes that need to be dynamically loaded based on user roles
 */
export const asyncRoutes = [
  {
    path: "/permission",
    component: Layout,
    hidden: true,
    redirect: "/permission/page",
    alwaysShow: true, // will always show the root menu
    name: "Permission",
    meta: {
      title: "Permission",
      icon: "lock",
      roles: ["admin", "editor"] // you can set roles in root nav
    },
    children: [
      {
        path: "page",
        component: () => import("@/views/permission/page"),
        name: "PagePermission",
        meta: {
          title: "Page Permission",
          roles: ["admin"] // or you can only set roles in sub nav
        }
      },
      {
        path: "directive",
        component: () => import("@/views/permission/directive"),
        name: "DirectivePermission",
        meta: {
          title: "Directive Permission"
          // if do not set roles, means: this page does not require permission
        }
      },
      {
        path: "role",
        component: () => import("@/views/permission/role"),
        name: "RolePermission",
        meta: {
          title: "Role Permission",
          roles: ["admin"]
        }
      }
    ]
  },
  {
    path: "/",
    component: Layout,
    redirect: "/dashboard",
    name: "概况",
    children: [
      {
        path: "dashboard",
        component: () => import("@/views/dashboard/index"),
        name: "概况",
        meta: { title: "概况", icon: "el-icon-my-1", affix: true }
      },
      {
        path: "message",
        component: () => import("@/views/message/message"),
        name: "消息",
        hidden: true,
        meta: { title: "消息" }
      }
    ]
  },
  {
    path: "/house",
    component: Layout,
    redirect: "/house/page",
    alwaysShow: true, // will always show the root menu
    name: "房产管理",
    meta: {
      title: "房产管理",
      icon: "el-icon-my-2",
      roles: ["admin", "editor"] // you can set roles in root nav
    },
    children: [
      {
        path: "query1",
        component: () => import("@/views/house/pageQueryList"),
        name: "房产",
        hidden: true,
        meta: {
          title: "待交割房产",
          roles: ["admin"] // or you can only set roles in sub nav
        }
      },
      {
        path: "query2",
        component: () => import("@/views/house/pageQueryList"),
        name: "房产",
        hidden: true,
        meta: {
          title: "待领钥匙房产",
          roles: ["admin"] // or you can only set roles in sub nav
        }
      },
      {
        path: "query3",
        component: () => import("@/views/house/pageQueryList"),
        name: "房产",
        hidden: true,
        meta: {
          title: "退房房产",
          roles: ["admin"] // or you can only set roles in sub nav
        }
      },
      {
        path: "page",
        component: () => import("@/views/house/pagelist"),
        name: "房产",
        meta: {
          title: "房产",
          roles: ["admin"] // or you can only set roles in sub nav
        }
      },
      {
        path: "pageDetail",
        component: () => import("@/views/house/pagelistDetail"),
        name: "房产详情",
        hidden: true,
        meta: {
          title: "房产详情"
          // if do not set roles, means: this page does not require permission
        },
        children: []
      },
      {
        path: "pageTime",
        component: () => import("@/views/house/pageTime"),
        name: "时间轴",
        hidden: true,
        meta: {
          title: "时间轴"
          // if do not set roles, means: this page does not require permission
        }
      },
      {
        path: "map",
        component: () => import("@/views/house/map"),
        name: "地图",
        hidden: true,
        meta: {
          title: "地图"
          // if do not set roles, means: this page does not require permission
        }
      },
      {
        path: "pageProcess",
        component: () => import("@/views/house/process"),
        name: "交接流程",
        hidden: true,
        meta: {
          title: "房产交接流程"
          // if do not set roles, means: this page does not require permission
        }
      },
      {
        path: "regroup",
        component: () => import("@/views/house/regroup"),
        name: "在租房源",
        hidden: true,
        meta: {
          title: "在租房源"
          // if do not set roles, means: this page does not require permission
        }
      },
      {
        path: "IdleHousing",
        component: () => import("@/views/house/IdleHousing"),
        name: "闲置房源",
        hidden: true,
        meta: {
          title: "闲置房源"
          // if do not set roles, means: this page does not require permission
        }
      },
      // {
      //   path: 'role',
      //   component: () => import('@/views/permission/role'),
      //   name: 'RolePermission',
      //   meta: {
      //     title: 'Role Permission',
      //     roles: ['admin']
      //   }
      // },
      {
        path: "lease",
        component: () => import("@/views/lease/page"),
        name: "租约",
        hidden: false,
        meta: {
          title: "租约",
          roles: ["admin"]
        }
      },
      {
        path: "sale",
        component: () => import("@/views/sale/page.vue"),
        name: "售房",
        meta: {
          title: "售房",
          roles: ["admin", "editor"]
        }
      },
      {
        path: "leasepageProcess",
        component: () => import("@/views/lease/process"),
        name: "招租流程",
        hidden: true,
        meta: {
          title: "招租流程"
          // if do not set roles, means: this page does not require permission
        }
      },
      {
        path: "salesProcess",
        component: () => import("@/views/sale/salesProcess.vue"),
        name: "售房流程",
        hidden: true,
        meta: {
          title: "售房流程"
        }
      }
    ]
  },
  {
    path: "/icon",
    component: Layout,
    hidden: true,
    children: [
      {
        path: "index",
        component: () => import("@/views/icons/index"),
        name: "Icons",
        meta: { title: "Icons", icon: "icon", noCache: true }
      }
    ]
  },
  {
    path: "/accountOrder",
    hidden: true,
    component: Layout,
    meta: { title: "账单", noCache: true },
    children: [
      {
        path: "index",
        component: () => import("@/views/account-order/index"),
        name: "账单",
        meta: { title: "全部账单", noCache: true }
      }
    ]
  },
  {
    path: "/accountOrderWait",
    hidden: true,
    component: Layout,
    meta: { title: "账单", noCache: true },
    children: [
      {
        path: "index",
        component: () => import("@/views/account-order/index"),
        name: "待上传账单",
        meta: { title: "待上传账单", noCache: true }
      }
    ]
  },
  {
    path: "/accountOrderExp",
    hidden: true,
    component: Layout,
    meta: { title: "账单", noCache: true },
    children: [
      {
        path: "index",
        component: () => import("@/views/account-order/index"),
        name: "已过期账单",
        meta: { title: "已过期账单", noCache: true }
      }
    ]
  },

  {
    path: "/billing",
    component: Layout,
    hidden: false,
    redirect: "/billing/index",
    name: "出租管理",
    meta: {
      title: "出租管理",
      icon: "el-icon-my-3"
    },
    children: [
      {
        path: "index",
        component: () => import("@/views/billing/billing"),
        name: "账单",
        meta: { title: "账单", noCache: true }
      },
      {
        path: "report",
        component: () => import("@/views/billing/report"),
        name: "报告",
        meta: { title: "报告", noCache: true }
      },
      {
        path: "repair",
        component: () => import("@/views/billing/repair"),
        name: "维修",
        meta: { title: "维修", noCache: true }
      },
      {
        path: "payment",
        component: () => import("@/views/billing/payment"),
        name: "缴费",
        meta: { title: "缴费", noCache: true }
      },
      {
        path: "detail",
        component: () => import("@/views/billing/detail-stat"),
        name: "明细统计",
        hidden: true,
        meta: { title: "明细统计", noCache: true }
      }
    ]
  },

  /** when your routing map is too long, you can split it into small modules **/
  // componentsRouter,
  // chartsRouter,
  // nestedRouter,
  // tableRouter,

  {
    path: "/example",
    component: Layout,
    hidden: true,
    redirect: "/example/list",
    name: "Example",
    meta: {
      title: "Example",
      icon: "el-icon-s-help"
    },
    children: [
      {
        path: "create",
        component: () => import("@/views/example/create"),
        name: "CreateArticle",
        meta: { title: "Create Article", icon: "edit" }
      },
      {
        path: "edit/:id(\\d+)",
        component: () => import("@/views/example/edit"),
        name: "EditArticle",
        meta: {
          title: "Edit Article",
          noCache: true,
          activeMenu: "/example/list"
        },
        hidden: true
      },
      {
        path: "list",
        component: () => import("@/views/example/list"),
        name: "ArticleList",
        meta: { title: "Article List", icon: "list" }
      }
    ]
  },

  {
    path: "/tab",
    component: Layout,
    hidden: true,
    children: [
      {
        path: "index",
        component: () => import("@/views/tab/index"),
        name: "Tab",
        meta: { title: "Tab", icon: "tab" }
      }
    ]
  },

  {
    path: "/error",
    component: Layout,
    hidden: true,
    redirect: "noRedirect",
    name: "ErrorPages",
    meta: {
      title: "Error Pages",
      icon: "404"
    },
    children: [
      {
        path: "401",
        component: () => import("@/views/error-page/401"),
        name: "Page401",
        meta: { title: "401", noCache: true }
      },
      {
        path: "404",
        component: () => import("@/views/error-page/404"),
        name: "Page404",
        meta: { title: "404", noCache: true }
      }
    ]
  },

  {
    path: "/error-log",
    component: Layout,
    hidden: true,
    children: [
      {
        path: "log",
        component: () => import("@/views/error-log/index"),
        name: "ErrorLog",
        meta: { title: "Error Log", icon: "bug" }
      }
    ]
  },

  {
    path: "/excel",
    component: Layout,
    hidden: true,
    redirect: "/excel/export-excel",
    name: "Excel",
    meta: {
      title: "Excel",
      icon: "excel"
    },
    children: [
      {
        path: "export-excel",
        component: () => import("@/views/excel/export-excel"),
        name: "ExportExcel",
        meta: { title: "Export Excel" }
      },
      {
        path: "export-selected-excel",
        component: () => import("@/views/excel/select-excel"),
        name: "SelectExcel",
        meta: { title: "Export Selected" }
      },
      {
        path: "export-merge-header",
        component: () => import("@/views/excel/merge-header"),
        name: "MergeHeader",
        meta: { title: "Merge Header" }
      },
      {
        path: "upload-excel",
        component: () => import("@/views/excel/upload-excel"),
        name: "UploadExcel",
        meta: { title: "Upload Excel" }
      }
    ]
  },

  {
    path: "/zip",
    component: Layout,
    hidden: true,
    redirect: "/zip/download",
    alwaysShow: true,
    name: "Zip",
    meta: { title: "Zip", icon: "zip" },
    children: [
      {
        path: "download",
        component: () => import("@/views/zip/index"),
        name: "ExportZip",
        meta: { title: "Export Zip" }
      }
    ]
  },

  {
    path: "/pdf",
    component: Layout,
    hidden: true,
    redirect: "/pdf/index",
    children: [
      {
        path: "index",
        component: () => import("@/views/pdf/index"),
        name: "PDF",
        meta: { title: "PDF", icon: "pdf" }
      }
    ]
  },
  {
    path: "/pdf/download",
    component: () => import("@/views/pdf/download"),
    hidden: true
  },

  {
    path: "/theme",
    component: Layout,
    hidden: true,
    children: [
      {
        path: "index",
        component: () => import("@/views/theme/index"),
        name: "Theme",
        meta: { title: "Theme", icon: "theme" }
      }
    ]
  },

  {
    path: "/clipboard",
    component: Layout,
    hidden: true,
    children: [
      {
        path: "index",
        component: () => import("@/views/clipboard/index"),
        name: "ClipboardDemo",
        meta: { title: "Clipboard", icon: "clipboard" }
      }
    ]
  },
  {
    path: "/manager",
    component: Layout,
    redirect: "/manager/owner",
    alwaysShow: true, // will always show the root menu
    name: "业务人员",
    meta: {
      title: "业务人员",
      icon: "el-icon-my-4",
      roles: ["admin", "editor"] // you can set roles in root nav
    },
    children: [
      {
        path: "owner",
        component: () => import("@/views/manager/ownerList"),
        name: "业主",
        meta: {
          title: "业主",
          roles: ["admin", "editor"] // or you can only set roles in sub nav
        }
      },
      {
        path: "ownerShow",
        component: () => import("@/views/manager/ownerShow"),
        name: "业主查看详情",
        hidden: true,
        meta: {
          title: "业主查看详情",
          roles: ["admin", "editor"] // or you can only set roles in sub nav
        }
      },
      {
        path: "BD",
        component: () => import("@/views/manager/BDList"),
        name: "BD",
        meta: {
          title: "BD",
          roles: ["admin", "editor"]
          // if do not set roles, means: this page does not require permission
        }
      },
      {
        path: "operator",
        component: () => import("@/views/manager/operatorList"),
        name: "运营",
        meta: {
          title: "运营",
          roles: ["admin", "editor"]
        }
      },
      {
        path: "property",
        component: () => import("@/views/manager/propertyList"),
        name: "物业经理",
        meta: {
          title: "物业经理",
          roles: ["admin", "editor"]
        }
      },
      {
        path: "salesman",
        component: () => import("@/views/manager/salesmanList"),
        name: "销售经理",
        meta: {
          title: "销售经理",
          roles: ["admin", "editor"]
        }
      }
    ]
  },
  // --------------
  {
    path: "/operation",
    component: Layout,
    redirect: "/operation/operater",
    alwaysShow: true, // will always show the root menu
    name: "业务运营",
    meta: {
      title: "业务运营",
      icon: "el-icon-my-5",
      roles: ["admin", "editor"] // you can set roles in root nav
    },
    children: [
      {
        path: "operater",
        component: () => import("@/views/operation/operaterList"),
        name: "资讯",
        meta: {
          title: "资讯",
          roles: ["admin", "editor"]
        },
        children: []
      },
      {
        path: "service",
        component: () => import("@/views/operation/serviceList"),
        name: "服务",
        meta: {
          title: "服务",
          roles: ["admin", "editor"]
        },
        children: []
      },
      {
        path: "serviceListAdd",
        component: () => import("@/views/operation/serviceListAdd"),
        name: "新增服务",
        hidden: true,
        meta: {
          title: "新增服务",
          roles: ["admin", "editor"]
        },
        children: []
      },
      {
        path: "serviceListEdit",
        component: () => import("@/views/operation/serviceListEdit"),
        name: "编辑服务",
        hidden: true,
        meta: {
          title: "编辑服务",
          roles: ["admin", "editor"]
        },
        children: []
      },
      {
        path: "operaterAdd",
        component: () => import("@/views/operation/addImgVideo"),
        name: "新增资讯",
        hidden: true,
        meta: {
          title: "新增资讯",
          roles: ["admin", "editor"]
        }
      },
      {
        path: "operatereditImgVideo",
        component: () => import("@/views/operation/editImgVideo"),
        name: "编辑资讯",
        hidden: true,
        meta: {
          title: "编辑资讯",
          roles: ["admin", "editor"]
        }
      },
      {
        path: "addCaousel",
        component: () => import("@/views/operation/carousel"),
        name: "新增轮播图",
        hidden: true,
        meta: {
          title: "新增轮播图",
          roles: ["admin", "editor"]
        }
      },
      {
        path: "editCarousel",
        component: () => import("@/views/operation/editCarousel"),
        name: "编辑轮播图",
        hidden: true,
        meta: {
          title: "编辑轮播图",
          roles: ["admin", "editor"]
        }
      },
      {
        path: "editorRaffle",
        component: () => import("@/views/operation/editorRaffle"),
        name: "编辑莱福介绍",
        hidden: true,
        meta: {
          title: "编辑莱福介绍",
          roles: ["admin", "editor"]
        }
      }
    ]
  },
  // ----
  {
    path: "/account",
    component: Layout,
    redirect: "/account/page",
    alwaysShow: true, // will always show the root menu
    name: "账号管理",
    meta: {
      title: "账号管理",
      icon: "el-icon-my-6",
      roles: ["admin", "editor"] // you can set roles in root nav
    },
    children: [
      {
        path: "page",
        component: () => import("@/views/account/page"),
        name: "用户账号",
        meta: {
          title: "用户账号",
          roles: ["admin", "editor"] // or you can only set roles in sub nav
        }
      },
      {
        path: "systemAccount",
        component: () => import("@/views/account/systemAccount"),
        name: "系统账号",
        meta: {
          title: "系统账号",
          roles: ["admin", "editor"]
          // if do not set roles, means: this page does not require permission
        }
      },
      {
        path: "roleSetting",
        component: () => import("@/views/account/roleSetting"),
        name: "角色设置",
        meta: {
          title: "角色设置",
          roles: ["admin", "editor"]
        }
      }
    ]
  },
  {
    path: "external-link",
    component: Layout,
    hidden: true,
    children: [
      {
        path: "https://github.com/PanJiaChen/vue-element-admin",
        meta: { title: "External Link", icon: "link" }
      }
    ]
  },
  // ----
  {
    path: "/seeting",
    component: Layout,
    redirect: "/seeting/seetingList",
    alwaysShow: true,
    name: "系统管理",
    meta: {
      title: "系统管理",
      icon: "el-icon-my-7",
      roles: ["admin", "editor"] // you can set roles in root nav
    },
    children: [
      {
        path: "seetingList",
        component: () => import("@/views/seeting/seetingList"),
        name: "数据配置",
        meta: {
          title: "数据配置",
          roles: ["admin", "editor"]
        },
        children: []
      },
      {
        path: "log",
        component: () => import("@/views/seeting/logList"),
        name: "操作日志",
        meta: {
          title: "操作日志",
          roles: ["admin", "editor"]
        },
        children: []
      }
    ]
  },
  // ----
  // {
  //   path: '/seeting',
  //   component: Layout,
  //   redirect: '/seeting/seetingList',
  //   alwaysShow: true, // will always show the root menu
  //   name: '系统管理',
  //   meta: {
  //     title: '系统管理',
  //     icon: 'el-icon-c-scale-to-original',
  //    //roles: ['admin', 'editor'] // you can set roles in root nav
  //   },
  //   children: [
  //     {
  //       path: 'seetingList',
  //       component: () => import('@/views/seeting/seetingList'),
  //       name: '数据配置',import { store } from '@/store';

  //       meta: {
  //         title: '编辑轮播图',
  //       //  roles: ['admin', 'editor']
  //       },
  //       children: []
  //     },
  //   ]
  // },
  // ----
  // 404 page must be placed at the end !!!
  { path: "*", redirect: "/404", hidden: true }
];

const createRouter = () =>
  new Router({
    // mode: 'history', // require service support
    scrollBehavior: () => ({ y: 0 }),
    routes: constantRoutes
  });

const router = createRouter();

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter();
  router.matcher = newRouter.matcher; // reset router
}

router.beforeEach((to, from, next) => {
  store.commit("app/setCloseMsg", true);
  next();
});

export default router;
